/*
 * PunterosHandler.h
 *
 *  Created on: 25/11/2011
 *      Author: putaro
 */
#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>

#ifndef PUNTEROSHANDLER_H_
#define PUNTEROSHANDLER_H_

using namespace std;
/*
 * Una instancia de esta clase permite definir un marco para la consulta de los punteros y frecuencias
 * contenidas en un archivo generado por una instancia de la clase GeneradorPunteros.
 * Dicho archivo contiene los punteros y frecuencias codificados mediante códigos Delta.
 */
class PunterosHandler {

	unsigned int bufferLectura; // buffer en el que se van levantando los bits
								// del archivo

	unsigned int posicionBufferLectura; //posición en el buffer

	unsigned int datosRestantes; // datos que restan leer de la colección de datos
								// correspondientes a un término en el archivo

	ifstream archivo; // archivo que contiene los punteros.

public:

	/*
	 * Pre: El parámetro es la ruta del directorio donde se encuentra el archivo
	 * con los datos acerca de los punteros.
	 * Post: Se ha creada la instancia abriendo el archivo correspondiente.
	 */
	PunterosHandler(const string & ruta);

	/*
	 * Pre: La instancia ha sido creada.
	 * Post: Se ha destruido la instancia cerrando archivos y liberando el resto de los
	 * recursos asociados.
	 */
	virtual ~PunterosHandler();

	/*
	 * Pre: La instancia ha sido creada y el parámetro es el offset al puntero.
	 * Post: Se ha posicionado la lectura en el bit correspondiente al offset dado
	 * por parámetro.
	*/
	void seek(const unsigned int offset);

	/*
	 * Pre: La instancia ha sido creada.
	 * Post: Se ha obtenido el bit siguiente a la posición actual.
	 */
	unsigned int getBit();

	/*
	 * Pre: La instancia ha sido creada.
	 * Post: Se han seteado los parámetros puntero y frecuencia, con los datos recuperados
	 * del archivo codificado.
	 */
	void getPunteroFrecuencia(unsigned int & puntero, unsigned int & frecuencia);
};

#endif /* PUNTEROSHANDLER_H_ */
